namespace ext.dd
{
	using System;
	using System.Runtime.CompilerServices;
	using System.Html;
	using System.Collections;
	
	
	/// <summary>
	/// A DragTracker listens for drag events on an Element and fires events at the start and end of the drag,
	/// as well as during the drag. This is useful for components such as {@link Ext.slider.MultiSlider}, where there is
	/// an element that can be dragged around to change the Slider&apos;s value.
	/// DragTracker provides a series of template methods that should be overridden to provide functionality
	/// in response to detected drag operations. These are onBeforeStart, onStart, onDrag and onEnd.
	/// See {@link Ext.slider.MultiSlider}&apos;s initEvents function for an example implementation.
	/// </summary>
	/// <definedin>src\dd\DragTracker.js</definedin>
	[ScriptName("DragTracker")]
	[ScriptNamespace("Ext.dd")]
	[Imported()]
	public partial class DragTracker : ext.util.Observable
	{
		
		#region Constructors
		public DragTracker(ext.dd.DragTracker_Configuration config)
		{
		}
		
		/// <summary>Constructor</summary>
		public DragTracker()
		{
		}
		#endregion
		
		#region Fields
		/// <summary>Defaults to false.</summary>
		/// <htmlSummary>Defaults to &lt;tt&gt;false&lt;/tt&gt;.</htmlSummary>
		/// <definedin>src\dd\DragTracker.js</definedin>
		[ScriptName("active")]
		public bool Active;
		
		/// <summary>Number of pixels the drag target must be moved before dragging is considered to have started. Defaults to 5.</summary>
		/// <htmlSummary>Number of pixels the drag target must be moved before dragging is considered to have started. Defaults to &lt;tt&gt;5&lt;/tt&gt;.</htmlSummary>
		/// <definedin>src\dd\DragTracker.js</definedin>
		[ScriptName("tolerance")]
		public System.Number Tolerance;
		
		/// <summary>
		/// Defaults to false. Specify true to defer trigger start by 1000 ms.
		/// Specify a Number for the number of milliseconds to defer trigger start.
		/// </summary>
		/// <htmlSummary>
		/// Defaults to &lt;tt&gt;false&lt;/tt&gt;. Specify &lt;tt&gt;true&lt;/tt&gt; to defer trigger start by 1000 ms.
		/// Specify a Number for the number of milliseconds to defer trigger start.
		/// </htmlSummary>
		/// <definedin>src\dd\DragTracker.js</definedin>
		[ScriptName("autoStart")]
		public ext.auto.System_Boolean_Or_System_Number AutoStart;
		
		/// <definedin>src\dd\DragTracker.js</definedin>
		[ScriptName("mousedownEventName")]
		public const string MousedownEventName = "mousedown";
		
		/// <definedin>src\dd\DragTracker.js</definedin>
		[ScriptName("mouseupEventName")]
		public const string MouseupEventName = "mouseup";
		
		/// <definedin>src\dd\DragTracker.js</definedin>
		[ScriptName("mousemoveEventName")]
		public const string MousemoveEventName = "mousemove";
		
		/// <definedin>src\dd\DragTracker.js</definedin>
		[ScriptName("dragstartEventName")]
		public const string DragstartEventName = "dragstart";
		
		/// <definedin>src\dd\DragTracker.js</definedin>
		[ScriptName("dragendEventName")]
		public const string DragendEventName = "dragend";
		
		/// <definedin>src\dd\DragTracker.js</definedin>
		[ScriptName("dragEventName")]
		public const string DragEventName = "drag";
		#endregion
		
		#region Methods
		/// <summary>
		/// Template method which should be overridden by each DragTracker instance. Called when the user first clicks and
		/// holds the mouse button down. Return false to disallow the drag
		/// </summary>
		/// <definedin>src\dd\DragTracker.js</definedin>
		/// <param name="e">The event object</param>
		[ScriptName("onBeforeStart")]
		public void OnBeforeStart(ext.EventObject e)
		{
			throw new System.Exception("Imported - not implemented");
		}
		
		/// <summary>
		/// Template method which should be overridden by each DragTracker instance. Called when a drag operation starts
		/// (e.g. the user has moved the tracked element beyond the specified tolerance)
		/// </summary>
		/// <definedin>src\dd\DragTracker.js</definedin>
		/// <param name="e">The event object</param>
		[ScriptName("onStart")]
		public void OnStart(ext.EventObject e)
		{
			throw new System.Exception("Imported - not implemented");
		}
		
		/// <summary>Template method which should be overridden by each DragTracker instance. Called whenever a drag has been detected.</summary>
		/// <definedin>src\dd\DragTracker.js</definedin>
		/// <param name="e">The event object</param>
		[ScriptName("onDrag")]
		public void OnDrag(ext.EventObject e)
		{
			throw new System.Exception("Imported - not implemented");
		}
		
		/// <summary>
		/// Template method which should be overridden by each DragTracker instance. Called when a drag operation has been completed
		/// (e.g. the user clicked and held the mouse down, dragged the element and then released the mouse button)
		/// </summary>
		/// <definedin>src\dd\DragTracker.js</definedin>
		/// <param name="e">The event object</param>
		[ScriptName("onEnd")]
		public void OnEnd(ext.EventObject e)
		{
			throw new System.Exception("Imported - not implemented");
		}
		
		/// <summary>Returns the drag target</summary>
		/// <definedin>src\dd\DragTracker.js</definedin>
		/// <returns>The element currently being tracked</returns>
		[ScriptName("getDragTarget")]
		public ext.Element GetDragTarget()
		{
			throw new System.Exception("Imported - not implemented");
		}
		#endregion
		
		#region Events
		/// <definedin>src\dd\DragTracker.js</definedin>
		[ScriptName("mousedown")]
		public event ext.auto.Delegate_ext_dd_DragTracker_And_System_Object Mousedown;
		
		/// <definedin>src\dd\DragTracker.js</definedin>
		[ScriptName("mouseup")]
		public event ext.auto.Delegate_ext_dd_DragTracker_And_System_Object Mouseup;
		
		/// <definedin>src\dd\DragTracker.js</definedin>
		[ScriptName("mousemove")]
		public event ext.auto.Delegate_ext_dd_DragTracker_And_System_Object Mousemove;
		
		/// <definedin>src\dd\DragTracker.js</definedin>
		[ScriptName("dragstart")]
		public event ext.auto.Delegate_ext_dd_DragTracker_And_System_Object Dragstart;
		
		/// <definedin>src\dd\DragTracker.js</definedin>
		[ScriptName("dragend")]
		public event ext.auto.Delegate_ext_dd_DragTracker_And_System_Object Dragend;
		
		/// <definedin>src\dd\DragTracker.js</definedin>
		[ScriptName("drag")]
		public event ext.auto.Delegate_ext_dd_DragTracker_And_System_Object Drag;
		#endregion
	}
}
